package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import Entita.Categoria;
import Entita.Contesto;
import Entita.Interpretazione;
import Entita.Paziente;
import Entita.Tavola;
import GUI.Main;

public class ContestoDAO
{

	Connection con=null;
	PreparedStatement ptmt=null;
	ResultSet rs=null;


	private Connection getConnection() throws SQLException
	{
		Connection conn;
		conn=ConnectionFactory.getInstance().getConnection();
		return conn;
	}


	public void add(Contesto contesto)
	{

		try
		{
			String querystring="INSERT INTO contesto (Id,Nome,R,G,B)" +
					"VALUES(?,?)";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, contesto.getId());
			ptmt.setString(2, contesto.getNome());
			ptmt.setInt(3, contesto.getColoreSfondo().getRed());
			ptmt.setInt(4, contesto.getColoreSfondo().getGreen());
			ptmt.setInt(5, contesto.getColoreSfondo().getBlue());
			ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
						Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
							Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
							Main.showError("Errore:"+e.getMessage());
			}

		}

	}
	
	public void update(Contesto contesto)
	{

		try
		{
			String querystring="UPDATE Contesto SET Nome=?, R=?, G=?, B=? " +
					"WHERE ID_Contesto=?";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setString(1, contesto.getNome());
			ptmt.setInt(2, contesto.getColoreSfondo().getRed());
			ptmt.setInt(3, contesto.getColoreSfondo().getGreen());
			ptmt.setInt(4, contesto.getColoreSfondo().getBlue());
			ptmt.setInt(5, contesto.getId());
			ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
						Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
							Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
							Main.showError("Errore:"+e.getMessage());
			}

		}

	}

	public void delete(Contesto contesto)
	{

		try
		{
			String querystring="DELETE FROM Ccontesto WHERE ID_Contesto=?";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, contesto.getId());
			ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
						Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}

	}

//	public List<Categoria> findAll(String Filtro)
//	{
//		List<Categoria> categorie=new ArrayList<Categoria>();
//		try
//		{
//			String querystring="" +
//					"SELECT R,G,B, Ca.* " +
//					"FROM " +
//					"	ContestoCategoria CC," +
//					"	Contesto C," +
//					"	Categoria Ca " +
//					"where" +
//					"	CC.ID_Categoria=Ca.ID_Categoria and " +
//					"	CC.ID_Contesto=C.ID_Contesto and " +
//					"	C.Nome=? " +
//					"ORDER BY Ordine ASC";
//			con=getConnection();
//			ptmt=con.prepareStatement(querystring);
//			ptmt.setString(1, Filtro);
//			rs=ptmt.executeQuery();
//			while(rs.next())
//			{
//				Categoria categoria=new Categoria(rs.getInt("ID_Categoria"),rs.getString("Nome"),rs.getInt("Ordine"),rs.getInt("R"),rs.getInt("G"),rs.getInt("B"));
//				categorie.add(categoria);
//			}
//			for(Categoria categoria : categorie){
//				categoria.setPazienti((ArrayList<Paziente>) getPazienti(categoria.getId()));
//			}
//		}
//		catch(SQLException e)
//		{
//						Main.showError("Errore:"+e.getMessage());
//		}
//		finally
//		{
//			try
//			{
//				if(rs!=null)
//					rs.close();
//				if(ptmt!=null)
//					ptmt.close();
//				if(con!=null)
//					con.close();
//			}
//			catch(SQLException e)
//			{
//							Main.showError("Errore:"+e.getMessage());
//			}
//			catch(Exception e)
//			{
//							Main.showError("Errore:"+e.getMessage());
//			}
//
//		}
//		return categorie;
//	}
	
	
	public Contesto findByPrimaryKey(int IDContesto) throws Exception
	{

		Contesto contesto=null;
		try
		{
			String querystring="SELECT * " +
					"FROM " +
					"	Contesto " +
					"where" +
					"	ID_Contesto=?";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, IDContesto);
			rs=ptmt.executeQuery();
			if(rs.next())
			{
				contesto=new Contesto(rs.getInt("ID_Contesto"),rs.getString("Nome"),rs.getInt("R"),rs.getInt("G"),rs.getInt("B"));
			}
		}
		catch(SQLException e)
		{
			throw new SQLException(e);
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				throw new SQLException(e);
			}
			catch(Exception e)
			{
				throw new Exception(e);
			}

		}

		return contesto;
	}
	
}